import PageJson from "../pages.json";
import Store from "../store";

/**
 * 所有Page和subPackages的路径管理，方便使用下列的Nav函数
 */
const PageNamePathMap = new Map();
PageJson.pages.forEach(page => PageNamePathMap.set(page.name, "/" + page.path));
PageJson.subPackages.forEach(subPages => {
  subPages.pages.forEach(page => {
    PageNamePathMap.set(page.name, "/" + subPages.root + "/" + page.path);
  });
});

/**
 * 保留当前页面，跳转到应用内的某个页面
 * @param pageName 页面名称（来自于page.json）
 * @param data
 */
const NavToPage = (pageName: string, data: any = null) => {
  uni.navigateTo({
    url: PageNamePathMap.get(pageName),
    success() {
      Store.Common.routerData = data;
    },
  });
};

/**
 * 关闭当前页面，跳转到应用内的某个页面。
 * @param pageName 页面名称（来自于page.json）
 * @param data
 */
const NavReplacePage = (pageName: string, data: any = null) => {
  uni.redirectTo({
    url: PageNamePathMap.get(pageName),
    success() {
      Store.Common.routerData = data;
    },
  });
};

/**
 * 关闭所有页面，打开到应用内的某个页面。
 * @param pageName 页面名称（来自于page.json）
 * @param data
 */
const NavReplaceAll = (pageName: string, data: any = null) => {
  uni.reLaunch({
    url: PageNamePathMap.get(pageName),
    success() {
      Store.Common.routerData = data;
    },
  });
};

/**
 * 关闭当前页面，返回上一页面
 * @param data
 */
const NavBack = (data: any = null) => {
  uni.navigateBack({
    success() {
      Store.Common.routerData = data;
    },
  });
};

/**
 *  路由跳转时带的信息
 */
const RouterData = () => Store.Common.routerData;

/**
 * 跳转Tabbar的页面
 * @param pageName 页面名称（来自于page.json）
 * @param data
 */
const NavSwitchTab = (tabbarIndex: number, data: any = null) => {
  const currentPages = getCurrentPages();
  Store.Common.tabbarIndex = tabbarIndex;
  Store.Common.routerData = data;
  "/" + currentPages[0].route === PageNamePathMap.get("Index") || NavReplaceAll("Index", data);
};

const Nav = {
  NavToPage,
  NavReplacePage,
  NavReplaceAll,
  NavBack,
  RouterData,
  NavSwitchTab,
};
export default Nav;
